package com.github.manx98.okdownloader.event;

import com.github.manx98.okdownloader.utils.DownloadBlockInfoWithLink;
import com.github.manx98.okdownloader.utils.DownloadTask;
import com.github.manx98.okdownloader.utils.OkDownloader;

/**
 * 下载任务事件处理器
 * @author : manx98
 * @date : 2021/5/24
 */
public interface DownloadTaskEventHandler {

    /**
     * 当下载执行开始时触发
     * @param downloadTask 下载任务
     */
    default void onStart(DownloadTask downloadTask){

    }

    /**
     * 当暂停时
     * @param downloadTask 被暂停的任务
     */
    default void onPause(DownloadTask downloadTask){

    }

    /**
     * 当下载完成时调用
     * @param downloadTask 下载块信息
     */
    default void onComplete(DownloadTask downloadTask){

    }

    /**
     * 下载产生异常时调用
     * 但是当此被触发时任务不一定失败
     * @param downloadBlockInfoWithLink 下载块信息
     * @param e 触发的异常
     */
    default void onError(DownloadBlockInfoWithLink downloadBlockInfoWithLink, Exception e){

    }

    /**
     * 当下载任务执行失败时调用
     * @param downloadTask 下载任务
     */
    default void onFailed(DownloadTask downloadTask){}

    /**
     * 当任务执行结束，无论是否成功都会调用
     * @param okDownloader 触发事件的下载器对象
     */
    default void onFinally(OkDownloader okDownloader){}
}
